import axios from 'axios'

// 响应拦截器
axios.interceptors.response.use(function (response) {
    return response
}, function (error) {
    return error
})

async function createAxios (type: string, url: string, data?: string) {
    if (type.toLocaleString() === 'get') {
        return await new Promise((res,rej)=>{
            getAxios(url,data,res,rej)
        })
    }else if (type.toLocaleString() === 'delete') {
        return await new Promise((res,rej)=>{
            deleteAxios(url,data,res,rej)
        })
    }else if (type.toLocaleString() === 'put') {
        return await new Promise((res,rej)=>{
            putAxios(url,data,res,rej)
        })
    }else{
        return await new Promise((res,rej)=>{
            postAxios(url,data,res,rej)
        })
    }
}

type Res = (value: unknown) => void
type Rej = (reason?: any) => void
type Data = {} | undefined

// get 请求
function getAxios (url: string,data: Data = {}, res: Res, rej: Rej) {
    axios.get(url,{
        params:data
    }).then(({data})=>{
        res(data)
    }).catch(err=>{
        rej(err)
    })
}

// post 请求
function postAxios (url: string, data: Data = {}, res: Res, rej: Rej) {
    axios.post(url,data).then(({data})=>{
        res(data)
    }).catch(err=>{
        rej(err)
    })
}

// delete 请求
function deleteAxios (url: string, data: Data = {}, res: Res, rej: Rej) {
    axios.delete(url,{
        params:data
    }).then(({data})=>{
        res(data)
    }).catch(err=>{
        rej(err)
    })
}

// put请求
function putAxios (url: string, data: Data = {}, res: Res, rej: Rej) {
    axios.put(url,data).then(({data})=>{
        res(data)
    }).catch(err=>{
        rej(err)
    })
}

export default createAxios
